package com.zerocarbon.framework.db.properties;

import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static com.zerocarbon.framework.db.properties.DatabaseProperties.PREFIX;

/**
 * 数据库配置
 * @author wyf  2020年6月9日
 */
@Data
@NoArgsConstructor
@ConfigurationProperties(PREFIX)
//@RefreshScope
public class DatabaseProperties {
	
	public static final String PREFIX = "zerocarbon.database";
	
	/**
	 * 是否禁止写入
	 */
	public Boolean isNotWrite = false;			//测试演示使用，开发和线上静止开启
    
    /**
     * 攻击 SQL 阻断解析器
     * @return
     */
    public Boolean isBlockAttack = false;
    
    /**
     * 是否启用 seata
     */
    public Boolean isSeata = false;
    
    /**
     * 是否启用数据权限
     */
    private Boolean isDataScope = false;
    
    /**
     * 事务超时时间
     */
    private int txTimeout = 60 * 60;

    /**
     * 统一管理事务的方法名
     */
    private List<String> transactionAttributeList = new ArrayList<>(Arrays.asList("add*", "save*", "insert*",
            "create*", "update*", "edit*", "upload*", "delete*", "remove*",
            "clean*", "recycle*", "batch*", "mark*", "disable*", "enable*", "handle*", "syn*",
            "reg*", "gen*", "*Tx"
    ));
    
    /**
     * 事务扫描基础包
     */
    private String transactionScanPackage = "com.zerocarbon";
    
    private Tenant tenant = new Tenant();
    
    @Data
    public static class Tenant {
        
        /**
         * 多租户模式
         */
        private MultiTenantType multiTenantType = MultiTenantType.COLUMN;		//默认采用字段多租户模式
        
        /**
         * 租户id 列名
         */
        private String tenantIdColumn = "tenant_id";
        
        /**
         * 租户库 前缀
         */
        private String tenantDatabasePrefix = "";

        /**
         * 配置不进行多租户隔离的表名
         */
        private List<String> ignoreTables = new ArrayList<>();

        /**
         * 配置不进行多租户隔离的sql
         * 需要配置mapper的全路径如：com.cuit.user.mapper.SysUserMapper.findList
         */
        private List<String> ignoreSqls = new ArrayList<>();
    }
    
    /**
     * Id 生成策略
     */
    /*private Id id = new Id();
    
    @Data
    public static class Id {
        
         * 终端ID (0-31)      单机配置0 即可。 集群部署，根据情况每个实例自增即可。
         
        private Long workerId = 0L;
        
         * 数据中心ID (0-31)   单机配置0 即可。 集群部署，根据情况每个实例自增即可。
         
        private Long dataCenterId = 0L;
    }*/
}
